home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / c / hash / RCS / Hash_InitTable.c,v < prev    next >
Text File  |  1988-07-28  |  3KB  |  153 lines

  1. head     1.3;
  2. access   ;
  3. symbols  ;
  4. locks    ; strict;
  5. comment  @ * @;
  6.  
  7.  
  8. 1.3
  9. date     88.07.28.17.57.28;  author ouster;  state Exp;
  10. branches ;
  11. next     1.2;
  12.  
  13. 1.2
  14. date     88.07.25.10.53.38;  author ouster;  state Exp;
  15. branches ;
  16. next     1.1;
  17.  
  18. 1.1
  19. date     88.06.20.09.30.25;  author ouster;  state Exp;
  20. branches ;
  21. next     ;
  22.  
  23.  
  24. desc
  25. @@
  26.  
  27.  
  28. 1.3
  29. log
  30. @Lint.
  31. @
  32. text
  33. @/* 
  34.  * Hash_InitTable.c --
  35.  *
  36.  *    Source code for the Hash_InitTable library procedure.
  37.  *
  38.  * Copyright 1988 Regents of the University of California
  39.  * Permission to use, copy, modify, and distribute this
  40.  * software and its documentation for any purpose and without
  41.  * fee is hereby granted, provided that the above copyright
  42.  * notice appear in all copies.  The University of California
  43.  * makes no representations about the suitability of this
  44.  * software for any purpose.  It is provided "as is" without
  45.  * express or implied warranty.
  46.  */
  47.  
  48. #ifndef lint
  49. static char rcsid[] = "$Header: Hash_InitTable.c,v 1.2 88/07/25 10:53:38 ouster Exp $ SPRITE (Berkeley)";
  50. #endif not lint
  51.  
  52. #include <hash.h>
  53. #include <list.h>
  54. #include <stdlib.h>
  55.  
  56. /*
  57.  *---------------------------------------------------------
  58.  * 
  59.  * Hash_InitTable --
  60.  *
  61.  *    This routine just sets up the hash table.
  62.  *
  63.  * Results:    
  64.  *    None.
  65.  *
  66.  * Side Effects:
  67.  *    Memory is allocated for the initial bucket area.
  68.  *
  69.  *---------------------------------------------------------
  70.  */
  71.  
  72. void
  73. Hash_InitTable(tablePtr, numBuckets, keyType)
  74.     register Hash_Table *tablePtr;    /* Structure to use to hold table. */
  75.     int             numBuckets;    /* How many buckets to create for
  76.                      * starters. This number is rounded
  77.                      * up to a power of two.   If <= 0,
  78.                      * a reasonable default is chosen.
  79.                      * The table will grow in size later
  80.                      * as needed. */
  81.     int             keyType;    /* HASH_STRING_KEYS means that key
  82.                          * values passed to HashFind will be
  83.                      * strings, passed via a (char *)
  84.                      * pointer.  HASH_ONE_WORD_KEYS means
  85.                      * that key values will be any
  86.                      * one-word value passed as Address.
  87.                       * > 1 means that key values will be 
  88.                       * multi-word values whose address is
  89.                      * passed as Address.  In this last
  90.                      * case, keyType is the number of
  91.                      * words in the key, not the number
  92.                      * of bytes. */
  93. {
  94.     register    int         i;
  95.     register    List_Links     *bucketPtr;
  96.  
  97.     /* 
  98.      * Round up the size to a power of two. 
  99.      */
  100.  
  101.     if (numBuckets <= 0) {
  102.     numBuckets = 16;
  103.     }
  104.     tablePtr->numEntries = 0;
  105.     tablePtr->keyType = keyType;
  106.     tablePtr->size = 2;
  107.     tablePtr->mask = 1;
  108.     tablePtr->downShift = 29;
  109.     while (tablePtr->size < numBuckets) {
  110.     tablePtr->size <<= 1;
  111.     tablePtr->mask = (tablePtr->mask << 1) + 1;
  112.     tablePtr->downShift--;
  113.     }
  114.  
  115.     tablePtr->bucketPtr = (List_Links *) malloc((unsigned) (sizeof(List_Links)
  116.         * tablePtr->size));
  117.     for (i=0, bucketPtr = tablePtr->bucketPtr; i < tablePtr->size;
  118.         i++, bucketPtr++) {
  119.     List_Init(bucketPtr);
  120.     }
  121. }
  122. @
  123.  
  124.  
  125. 1.2
  126. log
  127. @Lint.
  128. @
  129. text
  130. @d17 1
  131. a17 1
  132. static char rcsid[] = "$Header: Hash_InitTable.c,v 1.1 88/06/20 09:30:25 ouster Exp $ SPRITE (Berkeley)";
  133. d83 2
  134. a84 2
  135.     tablePtr->bucketPtr = (List_Links *) malloc(sizeof(List_Links)
  136.         * tablePtr->size);
  137. @
  138.  
  139.  
  140. 1.1
  141. log
  142. @Initial revision
  143. @
  144. text
  145. @d17 1
  146. a17 1
  147. static char rcsid[] = "$Header: proto.c,v 1.2 88/03/11 08:39:08 ouster Exp $ SPRITE (Berkeley)";
  148. d20 3
  149. a22 2
  150. #include "hash.h"
  151. #include "list.h"
  152. @
  153.